home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
asmutil
/
80x0393.zip
/
MOUSE.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-03-30
|
7KB
|
391 lines
; MOUSE.ASM (Turbo Assembler syntax)
; Assorted routines for interfacing to a Microsoft-compatible mouse driver.
; Public domain by Matthew Hildebrand (FidoNet 1:247/128.2)
; This module may be overlaid
IDEAL
P286
MODEL LARGE
CODESEG
; resets the mouse driver. Returns 1 if mouse installed, 0 if not
; char resetMouse(void);
PUBLIC C resetMouse
PROC C resetMouse
xor ax,ax
int 33h
cmp ax,0FFFFh
jne @@L1
mov ax,1
retcode
@@L1:
xor ax,ax
retcode
ENDP
; returns the number of buttons on the mouse
; CAUTION! Also resets the mouse
; char getButtonsMouse(void);
PUBLIC C getButtonsMouse
PROC C getButtonsMouse
xor ax,ax
int 33h
mov al,bl
xor ah,ah
retcode
ENDP
; shows the mouse pointer
; void showMouse(void);
PUBLIC C showMouse
PROC C showMouse
mov ax,1
int 33h
retcode
ENDP
; hides the mouse pointer
; void hideMouse(void);
PUBLIC C hideMouse
PROC C hideMouse
mov ax,2
int 33h
retcode
ENDP
; returns the current mouse (x,y) coordinates
; void getPosMouse(int far *x, int far *y);
PUBLIC C getPosMouse
PROC C getPosMouse
ARG x:DATAPTR, y:DATAPTR
mov ax,3
int 33h
les bx,[x]
; shr cx,1 ; adjust for mode 13h bug
mov [es:bx],cx
les bx,[y]
mov [es:bx],dx
leave
retcode
ENDP
; returns true if a button is pressed
; int buttonMouse(void);
PUBLIC C buttonMouse
PROC C buttonMouse
mov ax,3
int 33h
test bl,1
jz @@L1
mov ax,1
retcode
@@L1:
test bl,2
jz @@L2
mov ax,2
retcode
@@L2:
test bl,4
jz @@L3
mov ax,3
retcode
@@L3:
xor ax,ax
retcode
ENDP
; returns true if the left button is pressed
; int leftButtonMouse(void);
PUBLIC C leftButtonMouse
PROC C leftButtonMouse
mov ax,3
int 33h
test bl,1
jnz @@L1
xor ax,ax
retcode
@@L1:
mov ax,1
retcode
ENDP
; returns true if the right button is pressed
; int rightButtonMouse(void);
PUBLIC C rightButtonMouse
PROC C rightButtonMouse
mov ax,3
int 33h
test bl,2
jnz @@L1
xor ax,ax
retcode
@@L1:
mov ax,1
retcode
ENDP
; returns true if the center button is pressed
; int centerButtonMouse(void);
PUBLIC C centerButtonMouse
PROC C centerButtonMouse
mov ax,3
int 33h
test bl,4
jnz @@L1
xor ax,ax
retcode
@@L1:
mov ax,1
retcode
ENDP
; sets the position of the mouse pointer
; void setPosMouse(unsigned x,unsigned y);
PUBLIC C setPosMouse
PROC C setPosMouse
ARG x:WORD, y:WORD
mov ax,4
mov cx,[x]
; shl cx,1 ; adjust for mode 13h bug
mov dx,[y]
int 33h
leave
retcode
ENDP
; Returns the button press counter.
; unsigned buttonPressMouse(unsigned button, far *x, far *y);
PUBLIC C buttonPressMouse
PROC C buttonPressMouse
ARG button:WORD, x:DATAPTR, y:DATAPTR
mov ax,5
mov bx,[button]
dec bx
int 33h
mov ax,bx ; save press counter for return
les bx,[x]
; shr cx,1 ; Adjust for mode 13h bug
mov [es:bx],cx ; x coordinate
les bx,[y]
mov [es:bx],dx ; y coordinate
leave
retcode
ENDP
; Returns the button release counter.
; unsigned buttonReleaseMouse(unsigned button, far *x, far *y);
PUBLIC C buttonReleaseMouse
PROC C buttonReleaseMouse
ARG button:WORD, x:DATAPTR, y:DATAPTR
mov ax,6
mov bx,[button]
dec bx
int 33h
mov ax,bx ; save release counter for return
les bx,[x]
; shr cx,1 ; Adjust for mode 13h bug
mov [es:bx],cx ; x coordinate
les bx,[y]
mov [es:bx],dx ; y coordinate
leave
retcode
ENDP
; set the horizontal limits for the mouse pointer
; void setHorizLimitsMouse(unsigned min,unsigned max);
PUBLIC C setHorizLimitsMouse
PROC C setHorizLimitsMouse
ARG min:WORD, max:WORD
mov ax,7
mov cx,[min]
mov dx,[max]
; shl dx,1 ; adjust for mode 13h bug
int 33h
leave
retcode
ENDP
; set the vertical limits for the mouse pointer
; void setVertLimitsMouse(unsigned min,unsigned max);
PUBLIC C setVertLimitsMouse
PROC C setVertLimitsMouse
ARG min:WORD, max:WORD
mov ax,8
mov cx,[min]
mov dx,[max]
int 33h
leave
retcode
ENDP
; set the graphics pointer shape
; void setPointerMouse(int xoff,int yoff,void *p);
PUBLIC C setPointerMouse
PROC C setPointerMouse
ARG xOff:WORD, yOff:WORD, p:DATAPTR
mov ax,9
mov bx,[xOff]
mov cx,[yOff]
les dx,[p]
int 33h
leave
retcode
ENDP
; set a mouse pointer exclusion area. The pointer is not displayed when
; inside the specified coordinates. Only one is active at a time.
; Cancelled by a call to resetMouse() or showMouse()
; void setExclusionMouse(unsigned ulx,unsigned uly,unsigned lrx,unsigned lry);
PUBLIC C setExclusionMouse
PROC C setExclusionMouse
ARG ulx:WORD, uly:WORD, lrx:WORD, lry:WORD
push si di
mov ax,10
mov cx,[ulx]
; shr cx,1 ; adjust for mode 13h bug (?)
mov dx,[uly]
mov si,[lrx]
; shr si,1 ; adjust for mode 13h bug (?)
mov di,[lry]
int 33h
pop di si
leave
retcode
ENDP
; Set the mickeys to pixels ratio (mickeys/8 pixels)
PUBLIC C setRatioMouse
PROC C setRatioMouse
ARG horiz:WORD, vert:WORD
mov ax,000Fh
mov cx,[horiz]
mov dx,[vert]
int 33h
leave
retcode
ENDP
; Returns the size of the mouse save state buffer
PUBLIC C getSaveSizeMouse
PROC C getSaveSizeMouse
mov ax,0015h
int 33h
mov ax,bx
retcode
ENDP
; Save the current state of the mouse driver
PUBLIC C saveStateMouse
PROC C saveStateMouse
ARG data:DATAPTR
mov ax,0016h
les dx,[data]
int 33h
leave
retcode
ENDP
; Restore the state of the mouse driver
PUBLIC C restoreStateMouse
PROC C restoreStateMouse
ARG data:DATAPTR
mov ax,0017h
les dx,[data]
int 33h
leave
retcode
ENDP
; Set the mouse sensitivity (mickeys/8 pixels)
PUBLIC C setSensitivityMouse
PROC C setSensitivityMouse
ARG horiz:WORD, vert:WORD, doubleSpeed:WORD
mov ax,001Ah
mov bx,[horiz]
mov cx,[vert]
mov dx,[doubleSpeed]
int 33h
leave
retcode
ENDP
; Get the mouse sensitivity (mickeys/8 pixels)
PUBLIC C getSensitivityMouse
PROC C getSensitivityMouse
ARG horiz:DATAPTR, vert:DATAPTR, doubleSpeed:DATAPTR
push di
mov ax,001Bh
int 33h
les di,[horiz]
mov [es:di],bx
les di,[vert]
mov [es:di],cx
les di,[doubleSpeed]
mov [es:di],dx
pop di
leave
retcode
ENDP
; Disable the mouse driver and return the previous int 33h handler address
PUBLIC C disableMouse
PROC C disableMouse
mov ax,001Fh
int 33h
cmp ax,0FFFFh
je @@Error
mov dx,es
mov ax,bx
retcode
@@Error:
xor dx,dx
xor ax,ax
retcode
ENDP
; enables the mouse driver
; void enableMouse(void);
PUBLIC C enableMouse
PROC C enableMouse
mov ax,20h
int 33h
retcode
ENDP
; same as resetMouse(), but no initialization of mouse hardware
; void softResetMouse(void);
PUBLIC C softResetMouse
PROC C softResetMouse
mov ax,21h
int 33h
retcode
ENDP
; waits for the specified button to be released before returning
; void waitReleaseMouse(int button);
PUBLIC C waitReleaseMouse
PROC C waitReleaseMouse
ARG button:WORD
dec [button]
@@L1:
mov ax,3
int 33h
mov cx,[button]
mov dx,1
shl dx,cl
and bx,dx
or bx,bx
jnz @@L1
leave
retcode
ENDP
ENDS
END